Skip to main content

IPP, CUPS and JetDirect

IPP, CUPS, and JetDirect are printing protocols and services used by printers, print servers, and Linux/macOS print systems. In pentests, exposed print services can leak device info, jobs, usernames, internal names, and sometimes allow unauthenticated print or admin actions.

Connect

Using Browser​

CUPS often exposes a web interface on port 631.

http://target.com:631/
https://target.com:631/

Using curl​

HTTP checks identify CUPS, IPP, and admin paths.

curl -I http://target.com:631/
curl -I http://target.com:631/admin
curl -I http://target.com:631/printers/

Using lpstat​

lpstat lists printers and queues from CUPS.

lpstat -h target.com:631 -v
lpstat -h target.com:631 -p
lpstat -h target.com:631 -o

Using ipptool​

ipptool queries IPP attributes.

ipptool -tv ipp://target.com:631/printers/printer get-printer-attributes.test
ipptool -tv ipp://target.com:631/printers/printer get-jobs.test

Using Netcat for JetDirect​

JetDirect accepts raw print data on port 9100.

echo "authorized print test" | nc target.com 9100
printf "\033%-12345X@PJL INFO ID\r\n\033%-12345X" | nc target.com 9100

Recon

Service Detection with Nmap​

Scan print ports and nearby web interfaces.

nmap -p 631,9100,515,80,443 -sV target.com
nmap -p 631 --script http-title,http-headers target.com
nmap -p 9100 --script pjl-ready-message target.com

IPP Enumeration​

IPP attributes reveal printer names, locations, models, and supported operations.

ipptool -tv ipp://target.com:631/ipp/print get-printer-attributes.test
ipptool -tv ipp://target.com:631/printers/printer get-printer-attributes.test

CUPS Fingerprinting​

CUPS pages reveal version and queue names.

curl -s http://target.com:631/ | grep -Ei 'cups|printer|admin|version'
curl -s http://target.com:631/printers/ | grep -Ei 'printer|queue|class'

JetDirect Fingerprinting​

PJL commands may return device model and status.

printf "\033%-12345X@PJL INFO ID\r\n\033%-12345X" | nc target.com 9100
printf "\033%-12345X@PJL INFO STATUS\r\n\033%-12345X" | nc target.com 9100

Enumeration

Queue Enumeration​

Queues reveal printer names, locations, and job status.

lpstat -h target.com:631 -v
lpstat -h target.com:631 -p
lpstat -h target.com:631 -o

Job Enumeration​

Print jobs may leak usernames, filenames, or document titles.

ipptool -tv ipp://target.com:631/printers/printer get-jobs.test
curl -s http://target.com:631/jobs/

Device Attribute Enumeration​

Attributes expose model, firmware, location, and supported operations.

ipptool -tv ipp://target.com:631/printers/printer get-printer-attributes.test
printf "\033%-12345X@PJL INFO VARIABLES\r\n\033%-12345X" | nc target.com 9100

Admin Path Enumeration​

Check whether CUPS admin pages require authentication.

curl -i http://target.com:631/admin
curl -i http://target.com:631/admin/conf/cupsd.conf

Attack Vectors

Unauthenticated Printing​

Open queues may allow anyone to submit jobs.

lp -h target.com:631 -d printer test.txt
echo "authorized print test" | nc target.com 9100

Job Information Disclosure​

Jobs and history can reveal users, filenames, and departments.

lpstat -h target.com:631 -o
curl -s http://target.com:631/jobs/

CUPS Admin Exposure​

Exposed admin endpoints may allow configuration changes if auth is weak.

curl -i http://target.com:631/admin
curl -i http://target.com:631/admin/log/error_log

PJL Information Leakage​

PJL can disclose device information on

printf "\033%-12345X@PJL INFO ID\r\n\033%-12345X" | nc target.com 9100
printf "\033%-12345X@PJL INFO CONFIG\r\n\033%-12345X" | nc target.com 9100

Printer Abuse​

Printing tests should use a small controlled page to avoid disruption.

echo "Authorized pentest print check" | nc target.com 9100

Post-Exploitation

Printer Inventory​

Collect queues, models, and locations for the report.

lpstat -h target.com:631 -v > printers.txt
ipptool -tv ipp://target.com:631/printers/printer get-printer-attributes.test > printer-attributes.txt

User and Document Review​

Review job metadata only; avoid retrieving document content unless scoped.

lpstat -h target.com:631 -o > print-jobs.txt
grep -Ei 'user|owner|job|document|title' print-jobs.txt

Logging Check​

Submit one controlled job and confirm it is logged.

echo "Authorized pentest print check" | nc target.com 9100

Usefull Tools

ToolPurpose
nmapPort and service detection
curlCUPS web interface checks and HTTP testing
lpstatPrint queue, printer, and job enumeration
lpControlled print job submission and printer testing
ipptoolInternet Printing Protocol (IPP) attribute queries and printer capability testing
nc (Netcat)JetDirect (port 9100) and PJL protocol testing
PRET (Printer Exploitation Toolkit)Security assessment and exploitation testing of printer protocols (PJL, PostScript, PCL)